<?
class DateTimeUtil{
    static function to_time($date){
        if(preg_match('/(\d+)\/(\d+)\/(\d+)\s*(\d+)\:(\d+)/',$date,$patterns)){
            return strtotime($patterns[2].'/'.$patterns[1].'/'.$patterns[3])+$patterns[4]*3600+$patterns[5]*60;
        }
        else{
            $a = explode('/',$date);
            if(sizeof($a)==3 && is_numeric($a[1]) && is_numeric($a[2]) && is_numeric($a[0]) && checkdate($a[1],$a[0],$a[2])){
                return strtotime($a[1].'/'.$a[0].'/'.$a[2]);
            }
            else{
                return false;
            }       
        }
    }
    
    static function duration($duration) {
        if ($duration > 0) {
            $time = $duration;
            $year = floor($time / (365 * 3600 * 24));
            $month = floor($time / (30 * 3600 * 24));
            $week = floor($time / (7 * 3600 * 24));
            $day = floor($time / (3600 * 24));
            $hour = floor(($time % (3600 * 24)) / (3600));
            $minute = floor(($time % (3600)) / (60));

            if ($year != 0) {
                return $year . ' năm ';
            }

            if ($month != 0) {
                return $month . ' tháng ';
            }
            if ($week != 0) {
                return $week . ' tuần ';
            }
            if ($day != 0) {
                return $day . ' ngày ';
            }
            if ($hour != 0) {
                return $hour . ' giờ ';
            }

            if ($minute != 0) {
                return $minute . ' phút ';
            }

            return $time . ' giây ';
        } else {
            return ' vài giây';
        }
    }

    static function duration_time($time) {
        $time = TIME_NOW - $time;

        if ($time > 0) {
            if ($time > (365 * 86400)) {
                return floor($time / (365 * 86400)) . ' năm trước';
            }

            if ($time > (30 * 86400)) {
                return floor($time / (30 * 86400)) . ' tháng trước';
            }

            if ($time > (7 * 86400)) {
                return floor($time / (7 * 86400)) . ' tuần trước';
            }
            if ($time > 86400) {
                return floor($time / (86400)) . ' ngày trước';
            }

            if ($time > 3600) {
                return floor($time / (3600)) . ' giờ trước';
            }

            if ($time > 60) {
                return floor($time / (60)) . ' phút trước';
            }
        }
        return ' vài giây trước';
    }
    
	/**
	 * Tính số giây trong số tháng có thời gian bắt đầu
	 *
	 * @param $num_month: Số tháng
	 * @param $time_set: Thời gian sét bắt đầu. Mặc định là thời gian hiện tại
	 * @return Trả về thời gian kết thúc của các tháng được tính
	 */
    static function cal_month_time($num_month=1, $time_set)
    {
    	if (!$num_month) return 0;
    	if (!$time_set) $time_set = time();
    	
    	if ($time_set < time())
		{
			$hour 		= date("H");
			$min 		= date("i");
			$sec 		= date("s");
			$exDay 		= date("d");
			$exYear 	= date("Y");
			$exMonth	= date("m") + $num_month;
		}
		else 
		{
			$strDate 	= ECLib::getDateTimeFull($time_set);
			$aryDT 		= explode(" ", $strDate);
			$aryDate 	= explode("/", $aryDT[0]);
			$aryTime 	= explode(":", $aryDT[1]);
			
			$hour 		= $aryTime[0];
			$min 		= $aryTime[1];
			$sec 		= $aryTime[2];
			
			$exDay 		= $aryDate[0];
			$exYear 	= $aryDate[2];
			$exMonth	= $aryDate[1] + $num_month;
		}
		
		if ($exMonth > 12) {
			$exMonth -= 12;
			$exYear += 1;
		}
		$time_end = mktime($hour, $min, $sec, $exMonth, $exDay, $exYear);
    	
    	return $time_end;
    }

    static function get_next_month($month, $year)
    {
        $nextMonth = 1 + (int)$month;
        if($nextMonth <=12)
        {
            return array(str_pad($nextMonth,2,'0',STR_PAD_LEFT),$year);
        }else{
            return array("01",$year+1);
        }
    }

    static function get_prev_month($month, $year)
    {
        $prevMonth = $month-1;
        if($prevMonth<=0){
            return array("12",$year-1);
        }else{
            return array(str_pad($prevMonth,2,'0',STR_PAD_LEFT),$year);
        }
    }
    
    static function valid_date($dd = null, $mm, $yy)
    {
        if($dd !== null)
        {
        	if($dd >=1)
        	{
        		if($yy >= 2012)
        		{
        			switch((int)$mm)
        			{
        				case 2:
        					if($dd <= 29)
        					{
        						if(!($yy%4) || $dd != 29)//Là năm nhuận
        						{
        							return true;
        						}
        					}
        					break;
        				default:
        					if($dd <= 31)
        					{
        						if(in_array($dd, array(1,3,5,7,8,10,12)) || $dd != 31)
        						{
        							return true;
        						}
        					}
        					break;
        			}
        		}
        	}
        }
        elseif($mm >=1 && $mm <= 12)
        {
        	return true;
        }
        
        return false;
    }
}
?>